/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package managers;

import catalogos.ExtraccionCatalogos;
import clases.Solicitud;
import clases.VisitaTecnica;
import clases.informeTecnico.Bibliografia;
import clases.informeTecnico.CaracteristicasArquitectonicas;
import clases.informeTecnico.CategorizacionProteccionResenia;
import clases.informeTecnico.Entorno;
import clases.informeTecnico.Glosario;
import clases.informeTecnico.IdentificacionLocalizacion;
import clases.informeTecnico.RegistroFotografico;
import clases.informeTecnico.TipologiasConstruccionConservacion;
import conexionBD.ConexionServidor;
import editorTexto.managerConclu;
import editorTexto.managerresolucion;
import java.io.Serializable;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.model.SelectItem;
import javax.servlet.jsp.jstl.sql.Result;
import javax.servlet.jsp.jstl.sql.ResultSupport;

/**
 *
 * @author olvarey
 */
@ManagedBean
@SessionScoped
public class managerModificarExpediente implements Serializable {

    //variable global para buscar
    public static String numeroExpediente;
    //variables necesarias para filtrar
    private int departamentoSolicitanteSeleccionado;
    private int departamentoInmuebleSeleccionado;
    private int departamentoPropietarioSeleccionado;
    private int departamentoResponsableSeleccionado;
    private Integer libroIntroducido;
    //declarando variables del tipo de la clase que necesito las variables
    private ExtraccionCatalogos catalogos = new ExtraccionCatalogos();
    private Solicitud solicitudActual = new Solicitud();
    private VisitaTecnica visita = new VisitaTecnica();
    private IdentificacionLocalizacion IdentificacionActual = new IdentificacionLocalizacion();
    private CategorizacionProteccionResenia categorizacionActual = new CategorizacionProteccionResenia();
    private CaracteristicasArquitectonicas caracteristicasActual = new CaracteristicasArquitectonicas();
    private TipologiasConstruccionConservacion tipologiasActual = new TipologiasConstruccionConservacion();
    private Entorno entornoActual = new Entorno();
    private Bibliografia bibliografiaActual = new Bibliografia();
    private RegistroFotografico registroActual = new RegistroFotografico();
    private Glosario glosarioActual = new Glosario();
    FacesContext context;
    Boolean existeIT;
    private String categoriaSeleccionada;
    private String subcategoriaSeleccionada;
    private Boolean enableAltura1;
    private Boolean enableAltura2;
    //variables para perfil y permisos
    private String perfil;
    private String permiso;
    private managerresolucion resolucionActual = new managerresolucion();
    private managerConclu conclusionActual = new managerConclu();
    ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();

    /** Creates a new instance of managerModificarExpediente */
    public managerModificarExpediente() {
        caracteristicasActual.setAltura1(-1);
        caracteristicasActual.setAltura2(-1);
    }

    public Boolean getEnableAltura1() {
        return enableAltura1;
    }

    public void setEnableAltura1(Boolean enableAltura1) {
        this.enableAltura1 = enableAltura1;
    }

    public Boolean getEnableAltura2() {
        return enableAltura2;
    }

    public void setEnableAltura2(Boolean enableAltura2) {
        this.enableAltura2 = enableAltura2;
    }

    public String getNumeroExpediente() {
        return numeroExpediente;
    }

    public void setNumeroExpediente(String numeroExpediente) {
        managerModificarExpediente.numeroExpediente = numeroExpediente;
    }

    public int getDepartamentoInmuebleSeleccionado() {
        return departamentoInmuebleSeleccionado;
    }

    public void setDepartamentoInmuebleSeleccionado(int departamentoInmuebleSeleccionado) {
        this.departamentoInmuebleSeleccionado = departamentoInmuebleSeleccionado;
    }

    public int getDepartamentoPropietarioSeleccionado() {
        return departamentoPropietarioSeleccionado;
    }

    public void setDepartamentoPropietarioSeleccionado(int departamentoPropietarioSeleccionado) {
        this.departamentoPropietarioSeleccionado = departamentoPropietarioSeleccionado;
    }

    public int getDepartamentoResponsableSeleccionado() {
        return departamentoResponsableSeleccionado;
    }

    public void setDepartamentoResponsableSeleccionado(int departamentoResponsableSeleccionado) {
        this.departamentoResponsableSeleccionado = departamentoResponsableSeleccionado;
    }

    public int getDepartamentoSolicitanteSeleccionado() {
        return departamentoSolicitanteSeleccionado;
    }

    public void setDepartamentoSolicitanteSeleccionado(int departamentoSolicitanteSeleccionado) {
        this.departamentoSolicitanteSeleccionado = departamentoSolicitanteSeleccionado;
    }

    public Integer getLibroIntroducido() {
        return libroIntroducido;
    }

    public void setLibroIntroducido(Integer libroIntroducido) {
        this.libroIntroducido = libroIntroducido;
    }

    public ExtraccionCatalogos getCatalogos() {
        return catalogos;
    }

    public void setCatalogos(ExtraccionCatalogos catalogos) {
        this.catalogos = catalogos;
    }

    public Solicitud getSolicitudActual() {
        return solicitudActual;
    }

    public void setSolicitudActual(Solicitud solicitudActual) {
        this.solicitudActual = solicitudActual;
    }

    public VisitaTecnica getVisita() {
        return visita;
    }

    public void setVisita(VisitaTecnica visita) {
        this.visita = visita;
    }

    public IdentificacionLocalizacion getIdentificacionActual() {
        return IdentificacionActual;
    }

    public void setIdentificacionActual(IdentificacionLocalizacion IdentificacionActual) {
        this.IdentificacionActual = IdentificacionActual;
    }

    public CategorizacionProteccionResenia getCategorizacionActual() {
        return categorizacionActual;
    }

    public void setCategorizacionActual(CategorizacionProteccionResenia categorizacionActual) {
        this.categorizacionActual = categorizacionActual;
    }

    public CaracteristicasArquitectonicas getCaracteristicasActual() {
        return caracteristicasActual;
    }

    public void setCaracteristicasActual(CaracteristicasArquitectonicas caracteristicasActual) {
        this.caracteristicasActual = caracteristicasActual;
    }

    public Entorno getEntornoActual() {
        return entornoActual;
    }

    public void setEntornoActual(Entorno entornoActual) {
        this.entornoActual = entornoActual;
    }

    public Bibliografia getBibliografiaActual() {
        return bibliografiaActual;
    }

    public void setBibliografiaActual(Bibliografia bibliografiaActual) {
        this.bibliografiaActual = bibliografiaActual;
    }

    public Boolean getExisteIT() {
        return existeIT;
    }

    public void setExisteIT(Boolean existeIT) {
        this.existeIT = existeIT;
    }

    public String getCategoriaSeleccionada() {
        return categoriaSeleccionada;
    }

    public void setCategoriaSeleccionada(String categoriaSeleccionada) {
        this.categoriaSeleccionada = categoriaSeleccionada;
    }

    public String getSubcategoriaSeleccionada() {
        return subcategoriaSeleccionada;
    }

    public void setSubcategoriaSeleccionada(String subcategoriaSeleccionada) {
        this.subcategoriaSeleccionada = subcategoriaSeleccionada;
    }

    public TipologiasConstruccionConservacion getTipologiasActual() {
        return tipologiasActual;
    }

    public void setTipologiasActual(TipologiasConstruccionConservacion tipologiasActual) {
        this.tipologiasActual = tipologiasActual;
    }

    public RegistroFotografico getRegistroActual() {
        return registroActual;
    }

    public void setRegistroActual(RegistroFotografico registroActual) {
        this.registroActual = registroActual;
    }

    public Glosario getGlosarioActual() {
        return glosarioActual;
    }

    public void setGlosarioActual(Glosario glosarioActual) {
        this.glosarioActual = glosarioActual;
    }

    public managerresolucion getResolucionActual() {
        return resolucionActual;
    }

    public void setResolucionActual(managerresolucion resolucionActual) {
        this.resolucionActual = resolucionActual;
    }

    public managerConclu getConclusionActual() {
        return conclusionActual;
    }

    public void setConclusionActual(managerConclu conclusionActual) {
        this.conclusionActual = conclusionActual;
    }

    public String getPerfil() {
        return perfil;
    }

    public void setPerfil(String perfil) {
        this.perfil = perfil;
    }

    public String getPermiso() {
        return permiso;
    }

    public void setPermiso(String permiso) {
        this.permiso = permiso;
    }

    public List<SelectItem> getListaMunicipiosSolicitante() {
        List<SelectItem> municipios = new ArrayList<SelectItem>();
        municipios = catalogos.getListaMunicipiosFiltrados(departamentoSolicitanteSeleccionado);
        return municipios;
    }

    public List<SelectItem> getListaMunicipiosPropietario() {
        List<SelectItem> municipios = new ArrayList<SelectItem>();
        municipios = catalogos.getListaMunicipiosFiltrados(departamentoPropietarioSeleccionado);
        return municipios;
    }

    public List<SelectItem> getListaMunicipiosResponsable() {
        List<SelectItem> municipios = new ArrayList<SelectItem>();
        municipios = catalogos.getListaMunicipiosFiltrados(departamentoResponsableSeleccionado);
        return municipios;
    }

    public List<SelectItem> getListaMunicipiosInmueble() {
        List<SelectItem> municipios = new ArrayList<SelectItem>();
        municipios = catalogos.getListaMunicipiosFiltrados(departamentoInmuebleSeleccionado);
        return municipios;
    }

    public List<SelectItem> getListaConceptosDisponibles() {
        List<SelectItem> conceptos = new ArrayList<SelectItem>();
        conceptos = catalogos.getListaConcepto(numeroExpediente);
        return conceptos;
    }

    public void buscarPerfiles(){
    ConexionServidor myConexion = new ConexionServidor();
        try {
            Connection con = myConexion.getConnection();
            PreparedStatement ps = con.prepareStatement("select a.nombreusuario, b.nombreperfil, au.nombreautoridad from usuario a, perfil b, perfil_miembro pm, perfil_autoridad au where a.idusuario = pm.idusuario and pm.idperfil = b.idperfil and au.idperfil = pm.idperfil and au.autoridad = 'ROLE_MODEXPE'and a.nombreusuario = ?");
            ps.setString(1, extContext.getUserPrincipal().getName().toString());
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
              perfil  = rs.getString("nombreperfil");
              permiso = rs.getString("nombreautoridad");
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }
    //Metodo para extraer todos los expedientes

     public Result getListaExpediente() throws Exception {
        ConexionServidor miConexion = new ConexionServidor();
        Connection conn = miConexion.getConnection();
        buscarPerfiles();
        try {
            if ("MODIFICAR EXPEDIENTE".equals(permiso) && "TECNICO".equals(perfil)) {
                PreparedStatement ps = conn.prepareStatement("select * from expediente_usuario where nombreusuario = ? ");
                ps.setString(1, extContext.getUserPrincipal().getName().toString());
                ResultSet rs = ps.executeQuery();
                return ResultSupport.toResult(rs);
            } else if ("MODIFICAR EXPEDIENTE".equals(permiso)) {
                PreparedStatement ps = conn.prepareStatement("select * from expediente_usuario ");
                ResultSet rs = ps.executeQuery();
                return ResultSupport.toResult(rs);
            }
            return null;
        } finally {
            conn.close();
        }
    }


    public Boolean hayResultados() throws Exception {
        ConexionServidor miConexion = new ConexionServidor();
        ResultSet rs = null;
        Boolean isNotEmpty = null;
        try {
            Connection con = miConexion.getConnection();
            if ("TECNICO".equals(perfil)) {
                PreparedStatement ps = con.prepareStatement("select * from expediente_usuario where idexpediente = ? and nombreusuario = ?");
                ps.setString(1, numeroExpediente);
                ps.setString(2, extContext.getUserPrincipal().getName().toString());
                rs = ps.executeQuery();
                isNotEmpty = rs.next();
                rs.close();
                ps.close();
                con.close();
            } else if ("MODIFICAR EXPEDIENTE".equals(permiso)) {
                PreparedStatement ps = con.prepareStatement("select * from expediente_usuario where idexpediente = ? ");
                ps.setString(1, numeroExpediente);
                rs = ps.executeQuery();
                isNotEmpty = rs.next();
                rs.close();
                ps.close();
                con.close();
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return isNotEmpty;
    }

    public String buscandoInfo() throws Exception {
        String destino = null;
        if (hayResultados()) {
            buscarSolicitudParaModificar();
            buscarVisitaParaModificar();
            buscarIdentificacionParaModificar();
            buscarRegimenPropiedadUso();
            buscarCategoriaProteccionReseniaParaModificar();
            buscarCaracteristicasArquitectonicas();
            buscarTipologiasConstructivasConservacion();
            buscarEntorno();
            buscarValorizacion();
            buscarConclu();
            buscarRegistroFotografico();
            buscarResolucion();
            existIT();
            destino = "ir-modificar";
        } else {
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "BUSQUEDA EXPEDIENTE", "El expediente ingresado no existe o no esta disponible para modificar por este usuario"));
            numeroExpediente = "";
        }
        return destino;
    }

//buscando la información relacionada a un expediente
    public void buscarSolicitudParaModificar() {

        ConexionServidor miConexion = new ConexionServidor();
        try {
            Connection con = miConexion.getConnection();
            PreparedStatement ps = con.prepareStatement("select * from solicitud_expediente where idexpediente = ?");
            ps.setString(1, numeroExpediente);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                //EXTRACCION INFO SOLICITANTE
                solicitudActual.setPrimerNombreSolicitante(rs.getString("primernombre_sol"));
                solicitudActual.setSegundoNombreSolicitante(rs.getString("segundonombre_sol"));
                solicitudActual.setPrimerApellidoSolicitante(rs.getString("primerapellido_sol"));
                solicitudActual.setSegundoApellidoSolicitante(rs.getString("segundoapellido_sol"));
                solicitudActual.setDuiSolicitante(rs.getInt("dui_sol"));
                solicitudActual.setTelefonoResidenciaSolicitante(rs.getString("telresidencia_sol"));
                solicitudActual.setTelefonoFaxCelularSolicitante(rs.getString("telefax_sol"));
                solicitudActual.setTelefonoOficinaSolicitante(rs.getString("teloficina_sol"));
                //departamento y municipio q bienen de la base sobre el solicitante
                departamentoSolicitanteSeleccionado = rs.getInt("iddepto_soli");
                solicitudActual.setMunicipioSolicitanteSeleccionado(rs.getInt("idmuni_soli"));
                //EXTRACCION INFO INTERVENCION
                solicitudActual.setTipoIntervencionSeleccionado(rs.getInt("idintervencion"));
                //Extraccion de información de inmueble
                solicitudActual.setDireccionInmueble(rs.getString("direccion_inm"));
                solicitudActual.setDepartamentoNombreInmueble(rs.getString("depto_inm"));
                solicitudActual.setMunicipioNombreInmueble(rs.getString("muni_inm"));
                //Extracion del departamento y municipio sobre inmueble
                departamentoInmuebleSeleccionado = rs.getInt("iddepto_inm");
                solicitudActual.setMunicipioInmuebleSeleccionado(rs.getInt("idmuni_inm"));
                //observar comportamiento
                solicitudActual.setUsoOsriginalSelec(rs.getInt("iduso_suelo_original"));
                solicitudActual.setUsoActualSelec(rs.getInt("iduso_suelo_actual"));
                solicitudActual.setUsoDestinoSelec(rs.getInt("iduso_suelo_destinado"));
                solicitudActual.setUsoActual(rs.getString("uso_actual"));
                solicitudActual.setMatriculaCNR(rs.getString("matriculacnr"));
                solicitudActual.setColindanteNorte(rs.getString("alnorte"));
                solicitudActual.setColindanteSur(rs.getString("alsur"));
                solicitudActual.setColindanteEste(rs.getString("aleste"));
                solicitudActual.setColindanteOeste(rs.getString("aloeste"));
                solicitudActual.setNombreConstructorDisenador(rs.getString("constructor"));
                solicitudActual.setFechaConstruccion(rs.getString("fechaconstruccion"));
                //Extracccion de información de propietario
                solicitudActual.setPrimerNombrePropietario(rs.getString("primernombre_pro"));
                solicitudActual.setSegundoNombrePropietario(rs.getString("segundonombre_pro"));
                solicitudActual.setPrimerApellidoPropietario(rs.getString("primerapellido_pro"));
                solicitudActual.setSegundoApellidoPropietario(rs.getString("segundoapellido_pro"));
                solicitudActual.setDuiPropietario(rs.getInt("dui_pro"));
                solicitudActual.setTelefonoResidenciaPropietario(rs.getString("telresidencia_pro"));
                solicitudActual.setTelefonoOficinaPropietario(rs.getString("teloficina_pro"));
                solicitudActual.setTelefonoFaxCelularPropietario(rs.getString("telefax_pro"));
                //extraccion de municipio y departamento seleccionado
                departamentoPropietarioSeleccionado = rs.getInt("iddepto_prop");
                solicitudActual.setMunicipioPropietarioSeleccionado(rs.getInt("idmuni_pro"));
                solicitudActual.setEmailPropietario(rs.getString("email_pro"));
                solicitudActual.setDireccionPropietario(rs.getString("direccion_pro"));
                //Extraccion de información del profesional responsable
                solicitudActual.setPrimerNombreResponsable(rs.getString("primernombre_resp"));
                solicitudActual.setSegundoNombreResponsable(rs.getString("segundonombre_resp"));
                solicitudActual.setPrimerApellidoResponsable(rs.getString("primerapellido_resp"));
                solicitudActual.setSegundoApellidoResponsable(rs.getString("segundoapellido_resp"));
                solicitudActual.setDuiResponsable(rs.getInt("dui_resp"));
                solicitudActual.setTelefonoResidenciaResponsable(rs.getString("telresidencia_resp"));
                solicitudActual.setTelefonoOficinaResponsable(rs.getString("teloficina_resp"));
                solicitudActual.setTelefonoFaxCelularResponsable(rs.getString("telefax_resp"));
                //municipio y departamento sobre el responsable
                solicitudActual.setMunicipioResponsableSeleccionado(rs.getInt("idmuni_resp"));
                departamentoResponsableSeleccionado = rs.getInt("iddepto_resp");
                //información sobre la profesion del responsable
                solicitudActual.setProfesionResponsableSeleccionada(rs.getInt("idprofesion"));
                solicitudActual.setNumeroRegistroResponsable(rs.getString("registro_resp"));
                solicitudActual.setEmailResponsable(rs.getString("email_resp"));
                solicitudActual.setDireccionResponsable(rs.getString("direccion_resp"));
                solicitudActual.setIdInmueble(rs.getString("idinmueble"));
                solicitudActual.setIdColindante(rs.getInt("idcolindante"));
                solicitudActual.setIdPropietario(rs.getInt("idpropietario"));
                solicitudActual.setIdResponsable(rs.getInt("idresponsable"));
                solicitudActual.setIdSolicitante(rs.getInt("idsolicitante"));
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }

    }

    //actualizando la información de una solicitud
    public void guardarSolicitud() {

        ConexionServidor myConexion = new ConexionServidor();
        try {
            Connection con = myConexion.getConnection();
            //Sentencia sql que hace el llamado a el procedimiento
            String sql = "{call actualizasolicitudexpediente(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";
            CallableStatement cs = con.prepareCall(sql);
            //Setting the parameters to be catched by the stored procedure
            //DATOS INMUEBLE
            cs.setString(1, solicitudActual.getIdInmueble());
            cs.setInt(2, departamentoInmuebleSeleccionado);
            cs.setInt(3, solicitudActual.getMunicipioInmuebleSeleccionado());
            cs.setString(4, solicitudActual.getDireccionInmueble());
            cs.setString(5, solicitudActual.getMatriculaCNR());
            cs.setString(6, solicitudActual.getNombreConstructorDisenador());
            cs.setString(7, solicitudActual.getFechaConstruccion());
            cs.setInt(8, solicitudActual.getIdColindante());
            cs.setString(9, solicitudActual.getColindanteNorte());
            cs.setString(10, solicitudActual.getColindanteSur());
            cs.setString(11, solicitudActual.getColindanteEste());
            cs.setString(12, solicitudActual.getColindanteOeste());
            //DATOS PROPIETARIO
            cs.setInt(13, solicitudActual.getIdPropietario());
            cs.setInt(14, departamentoPropietarioSeleccionado);
            cs.setInt(15, solicitudActual.getMunicipioPropietarioSeleccionado());
            cs.setString(16, solicitudActual.getPrimerNombrePropietario());
            cs.setString(17, solicitudActual.getSegundoNombrePropietario());
            cs.setString(18, solicitudActual.getPrimerApellidoPropietario());
            cs.setString(19, solicitudActual.getSegundoApellidoPropietario());
            cs.setString(20, solicitudActual.getDireccionPropietario());
            cs.setString(21, solicitudActual.getTelefonoResidenciaPropietario());
            cs.setString(22, solicitudActual.getTelefonoOficinaPropietario());
            cs.setString(23, solicitudActual.getTelefonoFaxCelularPropietario());
            cs.setInt(24, solicitudActual.getDuiPropietario());
            cs.setString(25, solicitudActual.getEmailPropietario());
            //DATOS RESPONSABLE
            cs.setInt(26, solicitudActual.getIdResponsable());
            cs.setInt(27, departamentoResponsableSeleccionado);
            cs.setInt(28, solicitudActual.getMunicipioResponsableSeleccionado());
            cs.setString(29, solicitudActual.getPrimerNombreResponsable());
            cs.setString(30, solicitudActual.getSegundoNombreResponsable());
            cs.setString(31, solicitudActual.getPrimerApellidoResponsable());
            cs.setString(32, solicitudActual.getSegundoApellidoResponsable());
            cs.setString(33, solicitudActual.getDireccionResponsable());
            cs.setString(34, solicitudActual.getTelefonoResidenciaResponsable());
            cs.setString(35, solicitudActual.getTelefonoOficinaResponsable());
            cs.setString(36, solicitudActual.getTelefonoFaxCelularResponsable());
            cs.setInt(37, solicitudActual.getDuiResponsable());
            cs.setString(38, solicitudActual.getEmailResponsable());
            cs.setString(39, solicitudActual.getNumeroRegistroResponsable());
            cs.setInt(40, solicitudActual.getProfesionResponsableSeleccionada());
            //DATOS SOLICITANTE
            cs.setInt(41, solicitudActual.getIdSolicitante());
            cs.setInt(42, departamentoSolicitanteSeleccionado);
            cs.setInt(43, solicitudActual.getMunicipioSolicitanteSeleccionado());
            cs.setString(44, solicitudActual.getPrimerNombreSolicitante());
            cs.setString(45, solicitudActual.getSegundoNombreSolicitante());
            cs.setString(46, solicitudActual.getPrimerApellidoSolicitante());
            cs.setString(47, solicitudActual.getSegundoApellidoSolicitante());
            cs.setInt(48, solicitudActual.getDuiSolicitante());
            cs.setString(49, solicitudActual.getTelefonoResidenciaSolicitante());
            cs.setString(50, solicitudActual.getTelefonoOficinaSolicitante());
            cs.setString(51, solicitudActual.getTelefonoFaxCelularSolicitante());
            cs.setInt(52, solicitudActual.getUsoOsriginalSelec());
            cs.setInt(53, solicitudActual.getUsoDestinoSelec());
            cs.setInt(54, solicitudActual.getUsoActualSelec());
            cs.setString(55, solicitudActual.getObservacionUsoSuelo());
            cs.setString(56, numeroExpediente);
            cs.setInt(57, solicitudActual.getTipoIntervencionSeleccionado());
            //ejecucion del proceso almacenado
            cs.execute();
            //Mensaje de actualizacion éxitosa
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "ACTUALIZACI&Oacute;N", "La información fue actualizada con éxito"));
            //cierre de CallableStatement y Connection
            cs.close();
            con.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
    //buscando la información sobre visita tecnica

    public void buscarVisitaParaModificar() {
        ConexionServidor miConexion = new ConexionServidor();
        try {
            Connection con = miConexion.getConnection();
            PreparedStatement ps = con.prepareStatement("select * from visita_tecnica where idexpediente = ?");
            ps.setString(1, numeroExpediente);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                //Extraccion de información de solicitante
                visita.setFechaProgramada(rs.getString("fechaprogramada"));
                visita.setCodigoTransporteSeleccionado(rs.getInt("idtransporte"));
                visita.setMotivoVisita(rs.getString("motivovisita"));
                visita.setMotivoSuspension(rs.getString("motivosuspension"));
                visita.setFechaReprogramacion(rs.getString("fechareprogramacion"));
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

    public void guardarVisita() {
        //        String destino = null;
        ConexionServidor myConexion = new ConexionServidor();
        try {
            Connection con = myConexion.getConnection();
            //Sentencia sql que hace el llamado a el procedimiento
            String sql0 = "{call usertemp (?,?)}";
            CallableStatement cs0 = con.prepareCall(sql0);
            cs0.setString(1, numeroExpediente);
            cs0.setString(2, extContext.getUserPrincipal().getName().toString());
            cs0.execute();
            String sql = "{call visitatecnica(?,?,?,?,?,?)}";
            CallableStatement cs = con.prepareCall(sql);
            //Setting los parametros a ser captorados or el proceso almacenado
            cs.setInt(1, visita.getCodigoTransporteSeleccionado());
            cs.setString(2, numeroExpediente);
            cs.setString(3, visita.getFechaProgramada());
            cs.setString(4, visita.getMotivoVisita());
            cs.setString(5, visita.getMotivoSuspension());
            cs.setString(6, visita.getFechaReprogramacion());
            //ejecucion del proceso almacenado
            cs.execute();
            //Mensaje de actualizacion éxitosa
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "ACTUALIZACI&Oacute;N", "La información fue actualizada con éxito"));
            //cierre de CallableStatement y Connection
            cs0.close();
            cs.close();
            con.close();

        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
//        return destino;
    }

    public void buscarIdentificacionParaModificar() {
        ConexionServidor miConexion = new ConexionServidor();
        try {
            Connection con = miConexion.getConnection();
            PreparedStatement ps = con.prepareStatement("select * from vista_identiflocalizacion where idexpediente = ?");
            ps.setString(1, numeroExpediente); //se le debe mandar el numero de expediente
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                //Extraccion de información
                IdentificacionActual.setCodigoPropiedad(rs.getInt("idpropiedad"));
                IdentificacionActual.setCodigoIbci(rs.getString("codigoibci"));
                IdentificacionActual.setAreaInmueble(rs.getDouble("areainmueble"));
                IdentificacionActual.setNombreTrandicional(rs.getString("nombretradicional"));
                IdentificacionActual.setNombreActual(rs.getString("nombreactual"));
                IdentificacionActual.setLatitud(rs.getDouble("latitud"));
                IdentificacionActual.setLongitud(rs.getDouble("longitud"));
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }

    }

    public void guardarIdentificacion() {
        ConexionServidor myConexion = new ConexionServidor();
        try {
            Connection con = myConexion.getConnection();
            //Sentencia sql que hace el llamado a el procedimiento
//            String sql0 = "{call usertemp (?,?)}";
//            CallableStatement cs0 = con.prepareCall(sql0);
//            cs0.setString(1, numeroExpediente);
//            cs0.setString(2, extContext.getUserPrincipal().getName().toString());
//            cs0.execute();
//            cs0.close();
            String sql = "{call identiflocal(?,?,?,?,?,?,?,?)}";
            CallableStatement cs = con.prepareCall(sql);
            //Setting los parametros a ser captorados or el proceso almacenado
            cs.setString(1, numeroExpediente);//aca va el codigo del expediente
            cs.setInt(2, IdentificacionActual.getCodigoPropiedad());
            cs.setString(3, IdentificacionActual.getNombreTrandicional());
            cs.setString(4, IdentificacionActual.getNombreActual());
            cs.setDouble(5, IdentificacionActual.getAreaInmueble());
            cs.setString(6, IdentificacionActual.getCodigoIbci());
            cs.setDouble(7, IdentificacionActual.getLatitud());
            cs.setDouble(8, IdentificacionActual.getLongitud());
            //ejecucion del proceso almacenado
            cs.execute();
            //Mensaje de actualizacion éxitosa
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "ACTUALIZACI&Oacute;N", "La información fue actualizada con éxito"));
            //cierre de CallableStatement y Connection
            cs.close();
            con.close();
        } catch (Exception e) {
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR", "información incorrecta o faltante"));
            System.out.println(e.getMessage());
        }
    }

    public void buscarRegimenPropiedadUso() {

        ConexionServidor miConexion = new ConexionServidor();
        try {
            Connection con = miConexion.getConnection();
            PreparedStatement ps = con.prepareStatement("SELECT uso_actual.observacion FROM public.inmueble, public.uso_actual, public.solicitud WHERE inmueble.idinmueble = uso_actual.idinmueble AND inmueble.idinmueble = solicitud.idinmueble AND solicitud.idexpediente = ?");
            ps.setString(1, numeroExpediente); //se le debe mandar el numero de expediente
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                //Extraccion de información
                solicitudActual.setObservacionUsoSuelo(rs.getString("observacion"));
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

    public void guardarRegimenPropiedadUso() {
        ConexionServidor myConexion = new ConexionServidor();
        try {
            Connection con = myConexion.getConnection();
            //Sentencia sql que hace el llamado a el procedimiento
            String sql = "{call observauso(?,?)}";
            CallableStatement cs = con.prepareCall(sql);
            //Setting los parametros a ser captorados or el proceso almacenado
            cs.setString(1, numeroExpediente);//aca va el codigo del expediente
            cs.setString(2, solicitudActual.getObservacionUsoSuelo());
            //ejecucion del proceso almacenado
            cs.execute();
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "ACTUALIZACI&Oacute;N", "La información fue actualizada con éxito"));
            //cierre de CallableStatement y Connection
            cs.close();
            con.close();
        } catch (Exception e) {
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR", "información incorrecta o faltante"));
            System.out.println(e.getMessage());
        }
    }

    public void buscarCategoriaProteccionReseniaParaModificar() {
        ConexionServidor miConexion = new ConexionServidor();
        try {
            Connection con = miConexion.getConnection();
            PreparedStatement ps = con.prepareStatement("select * from categorizacion_resenia where idexpediente = ?");
            ps.setString(1, numeroExpediente); //se le debe mandar el numero de expediente
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                //Extraccion de información de solicitante
                categorizacionActual.setProteccionSeleccionada(rs.getInt("idproteccion"));
                categorizacionActual.setObservacion(rs.getString("observaciones"));
                categorizacionActual.setResenia(rs.getString("resenia"));
                categorizacionActual.setMarginacionCNR(rs.getBoolean("marginacioncnr"));
               // System.out.println("Valor del dato: " + categorizacionActual.isMarginacionCNR());
                categorizacionActual.setNotificacionAPropietario(rs.getBoolean("notificacionpropietario"));
                categorizacionActual.setNotificacionDeLey(rs.getBoolean("notificacionley"));
                categorizacionActual.setPublicacionDiario(rs.getBoolean("publicaciondiario"));
            }
            // obtencion de la categoria del inmueble
            PreparedStatement ps1 = con.prepareStatement("select idcategoria from resenia_categoria where idexpediente = ? and idcategoria like'01%'");
            ps1.setString(1, numeroExpediente); // aca va el codigo del expediente
            ResultSet rs1 = ps1.executeQuery();
            while (rs1.next()) {
                categoriaSeleccionada = (rs1.getString("idcategoria"));
            }
            //System.out.println("Valor categoria: "+categoriaSeleccionada);
            PreparedStatement ps2 = con.prepareStatement("select idcategoria from resenia_categoria where idexpediente = ? and idcategoria like'02%'");
            ps2.setString(1, numeroExpediente); // aca va el codigo del expediente
            ResultSet rs2 = ps2.executeQuery();
            while (rs2.next()) {
                subcategoriaSeleccionada = (rs2.getString("idcategoria"));
            }
            //System.out.println("Valor subcategoria: "+subcategoriaSeleccionada);
            rs.close();
            rs1.close();
            rs2.close();
            ps.close();
            ps1.close();
            ps2.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

    public void guardarCategoriaProteccionResenia() {
        ConexionServidor myConexion = new ConexionServidor();
        try {
            Connection con = myConexion.getConnection();
            //Sentencia sql que hace el llamado a el procedimiento
            String sql0 = "{call usertemp (?,?)}";
            CallableStatement cs0 = con.prepareCall(sql0);
            cs0.setString(1, numeroExpediente);
            cs0.setString(2, extContext.getUserPrincipal().getName().toString());
            cs0.execute();
            cs0.close();
            String sql = "{call cateprotecresen(?,?,?,?,?,?,?,?,?,?)}";
            CallableStatement cs = con.prepareCall(sql);
            //Setting los parametros a ser captorados or el proceso almacenado
            cs.setString(1, numeroExpediente); //aca va el codigo de expediente
            cs.setInt(2, categorizacionActual.getProteccionSeleccionada());
            cs.setString(3, categorizacionActual.getObservacion());
            cs.setString(4, categorizacionActual.getResenia());
            cs.setBoolean(5, categorizacionActual.isMarginacionCNR());
            cs.setBoolean(6, categorizacionActual.isNotificacionAPropietario());
            cs.setBoolean(7, categorizacionActual.isNotificacionDeLey());
            cs.setBoolean(8, categorizacionActual.isPublicacionDiario());
            cs.setString(9, categoriaSeleccionada);
            cs.setString(10, subcategoriaSeleccionada);
            //ejecucion del proceso almacenado
            cs.execute();
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "ACTUALIZACI&Oacute;N", "La información fue actualizada con éxito"));
            //cierre de CallableStatement y Connection
            cs.close();
            con.close();
        } catch (Exception e) {
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR", "información incorrecta o faltante"));
            System.out.println(e.getMessage());
        }
    }

    public void buscarCaracteristicasArquitectonicas() {
        //PENDIENTE!!!!!!! AUN!!!!!!!!!!!!!
        ConexionServidor miConexion = new ConexionServidor();
        try {
            Connection con = miConexion.getConnection();
            PreparedStatement ps = con.prepareStatement("select * from arquitectonica where idexpediente = ?");
            ps.setString(1, numeroExpediente); //se le debe mandar el numero de expediente
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                //Extraccion de información de solicitante
                caracteristicasActual.setParcelaSeleccionada(rs.getInt("idparcela"));
                caracteristicasActual.setLineaSeleccionada(rs.getInt("idlinea"));
                caracteristicasActual.setConstruccionSeleccionada(rs.getInt("idconstruccion"));
                caracteristicasActual.setObservacion(rs.getString("observacionarquitec"));
            }
            // obtencion de la categoria del inmueble
            rs.close();
            ps.close();

            PreparedStatement ps1 = con.prepareStatement("select * from altura where idexpediente = ? and idnivel = 1");
            ps1.setString(1, numeroExpediente); //se le debe mandar el numero de expediente
            ResultSet rs1 = ps1.executeQuery();
            while (rs1.next()) {
                //Extraccion de información de solicitante
                caracteristicasActual.setAltura1(rs1.getDouble("altura"));
            }
            // obtencion de la categoria del inmueble
            rs1.close();
            ps1.close();

            PreparedStatement ps2 = con.prepareStatement("select * from altura where idexpediente = ? and idnivel = 2");
            ps2.setString(1, numeroExpediente); //se le debe mandar el numero de expediente
            ResultSet rs2 = ps2.executeQuery();
            while (rs2.next()) {
                //Extraccion de información de solicitante
                caracteristicasActual.setAltura2(rs2.getDouble("altura"));
            }
            // obtencion de la categoria del inmueble
            rs2.close();
            ps2.close();

            PreparedStatement ps3 = con.prepareStatement("select * from altura where idexpediente = ? and idnivel = 3");
            ps3.setString(1, numeroExpediente); //se le debe mandar el numero de expediente
            ResultSet rs3 = ps3.executeQuery();
            while (rs3.next()) {
                //Extraccion de información de solicitante
                caracteristicasActual.setAlero(rs3.getDouble("altura"));
            }
            // obtencion de la categoria del inmueble
            rs3.close();
            ps3.close();

            PreparedStatement ps4 = con.prepareStatement("select * from altura where idexpediente = ? and idnivel = 4");
            ps4.setString(1, numeroExpediente); //se le debe mandar el numero de expediente
            ResultSet rs4 = ps4.executeQuery();
            while (rs4.next()) {
                //Extraccion de información de solicitante
                caracteristicasActual.setCumbrera(rs4.getDouble("altura"));
            }
            // obtencion de la categoria del inmueble
            rs4.close();
            ps4.close();

            con.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

    public void guardarCaracteristicasArquitectonicas() {
        ConexionServidor myConexion = new ConexionServidor();
        try {
            Connection con = myConexion.getConnection();
            //Sentencia sql que hace el llamado a el procedimiento
            String sql0 = "{call usertemp (?,?)}";
            CallableStatement cs0 = con.prepareCall(sql0);
            cs0.setString(1, numeroExpediente);
            cs0.setString(2, extContext.getUserPrincipal().getName().toString());
            cs0.execute();
            cs0.close();
            String sql = "{call arquifacha(?,?,?,?,?,?)}";
            CallableStatement cs = con.prepareCall(sql);
            //Setting los parametros a ser captorados or el proceso almacenado
            cs.setString(1, numeroExpediente); //aca va el codigo de expediente
            cs.setInt(2, caracteristicasActual.getParcelaSeleccionada());
            cs.setInt(3, caracteristicasActual.getLineaSeleccionada());
            cs.setInt(4, caracteristicasActual.getConstruccionSeleccionada());
            cs.setString(5, caracteristicasActual.getObservacion());
            cs.setInt(6, caracteristicasActual.getFachadaSeleccionada()); //tendre que agregar aca alturas
            //ejecucion del proceso almacenado
            cs.execute();
            //cierre de CallableStatement y Connection
            cs.close();
            String sql1 = "{call alturaarqui(?,?,?)}";
            CallableStatement cs1 = con.prepareCall(sql1);
            if (caracteristicasActual.getAlero() > 0) {
                String sql01 = "{call usertemp (?,?)}";
                CallableStatement cs01 = con.prepareCall(sql01);
                cs01.setString(1, numeroExpediente);
                cs01.setString(2, extContext.getUserPrincipal().getName().toString());
                cs01.execute();
                cs01.close();
                cs1.setString(1, numeroExpediente); //codigo del expediente
                cs1.setInt(2, 3);
                cs1.setDouble(3, caracteristicasActual.getAlero());
                cs1.execute();
            }

            if (caracteristicasActual.getCumbrera() > 0) {
                String sql02 = "{call usertemp (?,?)}";
                CallableStatement cs02 = con.prepareCall(sql02);
                cs02.setString(1, numeroExpediente);
                cs02.setString(2, extContext.getUserPrincipal().getName().toString());
                cs02.execute();
                cs02.close();
                cs1.setString(1, numeroExpediente); //codigo del expediente
                cs1.setInt(2, 4);
                cs1.setDouble(3, caracteristicasActual.getCumbrera());
                cs1.execute();
            }

            if (caracteristicasActual.getAltura1() != -1) {
                String sql03 = "{call usertemp (?,?)}";
                CallableStatement cs03 = con.prepareCall(sql03);
                cs03.setString(1, numeroExpediente);
                cs03.setString(2, extContext.getUserPrincipal().getName().toString());
                cs03.execute();
                cs03.close();
                cs1.setString(1, numeroExpediente); //codigo del expediente
                cs1.setInt(2, 1);
                cs1.setDouble(3, caracteristicasActual.getAltura1());
                cs1.execute();
            }

            if (caracteristicasActual.getAltura2() != -1) {
                String sql04 = "{call usertemp (?,?)}";
                CallableStatement cs04 = con.prepareCall(sql04);
                cs04.setString(1, numeroExpediente);
                cs04.setString(2, extContext.getUserPrincipal().getName().toString());
                cs04.execute();
                cs04.close();
                cs1.setString(1, numeroExpediente); //codigo del expediente
                cs1.setInt(2, 2);
                cs1.setDouble(3, caracteristicasActual.getAltura2());
                cs1.execute();
            }
            cs1.close();

//            String sql05 = "{call usertemp (?,?)}";
//            CallableStatement cs05 = con.prepareCall(sql05);
//            cs05.setString(1, numeroExpediente);
//            cs05.setString(2, extContext.getUserPrincipal().getName().toString());
//            cs05.execute();
//            cs05.close();
            String sql2 = "{call areaarqui(?,?)}";
            Iterator it = caracteristicasActual.getAreas().getTarget().iterator();
            while (it.hasNext()) {
                String sql06 = "{call usertemp (?,?)}";
                CallableStatement cs06 = con.prepareCall(sql06);
                cs06.setString(1, numeroExpediente);
                cs06.setString(2, extContext.getUserPrincipal().getName().toString());
                cs06.execute();
                cs06.close();
                CallableStatement cs2 = con.prepareCall(sql2);
                cs2.setString(1, numeroExpediente); //aca va el codigo del expediente
                cs2.setString(2, it.next().toString()); //aca va el elemento del arrayList
                cs2.execute();
                cs2.close();
            }

            String sql3 = "{call plantaarqui(?,?)}";
            Iterator it2 = caracteristicasActual.getPlantas().getTarget().iterator();
            while (it2.hasNext()) {
                String sql07 = "{call usertemp (?,?)}";
                CallableStatement cs07 = con.prepareCall(sql07);
                cs07.setString(1, numeroExpediente);
                cs07.setString(2, extContext.getUserPrincipal().getName().toString());
                cs07.execute();
                cs07.close();
                CallableStatement cs3 = con.prepareCall(sql3);
                cs3.setString(1, numeroExpediente);//aca va el codigo del expediente
                cs3.setString(2, it2.next().toString());
                cs3.execute();
                cs3.close();
            }
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "ACTUALIZACI&Oacute;N", "La información fue actualizada con éxito"));
            con.close();
        } catch (Exception e) {
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR", "información incorrecta o faltante"));
            System.out.println(e.getMessage());
        }
    }

    public void buscarTipologiasConstructivasConservacion() {
        ConexionServidor miConexion = new ConexionServidor();
        try {
            Connection con = miConexion.getConnection();
            PreparedStatement ps = con.prepareStatement("select * from fachada_acceso where idexpediente = ?");
            ps.setString(1, numeroExpediente); //se le debe mandar el numero de expediente
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                //Extraccion de información de solicitante
                tipologiasActual.setRemateFachadaSeleccionado(rs.getInt("idremate_fachada"));
                tipologiasActual.setTipoIngresoSeleccionado(rs.getInt("idingreso"));
            }
            PreparedStatement ps1 = con.prepareStatement("SELECT rotulo_fachada.idrotulo FROM public.fachada_acceso, public.rotulo_fachada WHERE fachada_acceso.idfachadaacceso = rotulo_fachada.idfachadaacceso AND fachada_acceso.idexpediente = ?");
            ps1.setString(1, numeroExpediente); //se le debe mandar el numero de expediente
            ResultSet rs1 = ps1.executeQuery();
            while (rs1.next()) {
                //Extraccion de información de solicitante
                tipologiasActual.setRotuloSeleccionado(rs1.getInt("idrotulo"));
            }
            rs.close();
            ps.close();
            rs1.close();
            ps1.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

    public void guardarTipologiasConstructivasConservacion() {
        ConexionServidor myConexion = new ConexionServidor();
        try {
            Connection con = myConexion.getConnection();
            //Sentencia sql que hace el llamado a el procedimiento
            String sql0 = "{call usertemp (?,?)}";
            CallableStatement cs0 = con.prepareCall(sql0);
            cs0.setString(1, numeroExpediente);
            cs0.setString(2, extContext.getUserPrincipal().getName().toString());
            cs0.execute();
            String sql = "{call tipologiaconserva(?,?,?,?)}"; //CAMBIAR NOMBRE DE FUNCION
            CallableStatement cs = con.prepareCall(sql);
            //Setting los parametros a ser captorados or el proceso almacenado
            cs.setString(1, numeroExpediente); //aca va el codigo de expediente
            cs.setInt(2, tipologiasActual.getRemateFachadaSeleccionado());
            cs.setInt(3, tipologiasActual.getTipoIngresoSeleccionado());
            cs.setInt(4, tipologiasActual.getRotuloSeleccionado());
            //ejecucion del proceso almacenado
            cs.execute();
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "ACTUALIZACI&Oacute;N", "La información fue actualizada con éxito"));
            //cierre de CallableStatement y Connection
            cs0.close();
            cs.close();
            con.close();
        } catch (Exception e) {
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR", "información incorrecta o faltante"));
            System.out.println(e.getMessage());
        }
    }

    public Result getListaResumenMatriz() throws Exception {
        ConexionServidor miConexion = new ConexionServidor();
        Connection conn = miConexion.getConnection();
        try {
            PreparedStatement ps = conn.prepareStatement("select * from resumenmatriz where idexpediente = ?");
            ps.setString(1, numeroExpediente);
            ResultSet rs = ps.executeQuery();
            return ResultSupport.toResult(rs);
        } finally {
            conn.close();
        }
    }

    public void buscarEntorno() {
        ConexionServidor miConexion = new ConexionServidor();
        try {
            Connection con = miConexion.getConnection();
            PreparedStatement ps = con.prepareStatement("select * from entorno where idexpediente = ?");
            ps.setString(1, numeroExpediente); //se le debe mandar el numero de expediente
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                //Extraccion de información de solicitante
                entornoActual.setPerfilCuadra(rs.getString("perfilcuadra"));
                entornoActual.setLineaConstruccion(rs.getString("lineaconstruccion"));
                entornoActual.setPerfilFrenteCuadra(rs.getString("perfilfrentecuadra"));
                entornoActual.setAnchoAcera(rs.getDouble("anchoacera"));
                entornoActual.setAnchoArriate(rs.getDouble("anchoarriate"));
                entornoActual.setAnchoRodaje(rs.getDouble("anchorodaje"));
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

    public void guardarEntorno() {
        ConexionServidor myConexion = new ConexionServidor();
        try {
            Connection con = myConexion.getConnection();
            //Sentencia sql que hace el llamado a el procedimiento
            String sql0 = "{call usertemp (?,?)}";
            CallableStatement cs0 = con.prepareCall(sql0);
            cs0.setString(1, numeroExpediente);
            cs0.setString(2, extContext.getUserPrincipal().getName().toString());
            cs0.execute();
            cs0.close();
            String sql = "{call entornoinm(?,?,?,?,?,?,?)}";
            CallableStatement cs = con.prepareCall(sql);
            //Setting los parametros a ser captorados or el proceso almacenado
            cs.setString(1, numeroExpediente); //aca va el codigo de expediente
            cs.setString(2, entornoActual.getPerfilCuadra());
            cs.setString(3, entornoActual.getLineaConstruccion());
            cs.setDouble(4, entornoActual.getAnchoAcera());
            cs.setDouble(5, entornoActual.getAnchoArriate());
            cs.setDouble(6, entornoActual.getAnchoRodaje());
            cs.setString(7, entornoActual.getPerfilFrenteCuadra());
            //ejecucion del proceso almacenado
            cs.execute();
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "ACTUALIZACI&Oacute;N", "La información fue actualizada con éxito"));
            //cierre de CallableStatement y Connection
            cs.close();
            con.close();
        } catch (Exception e) {
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR", "información incorrecta o faltante"));
            System.out.println(e.getMessage());
        }
    }

    public void buscarValorizacion() {
        ConexionServidor miConexion = new ConexionServidor();
        try {
            Connection con = miConexion.getConnection();
            PreparedStatement ps = con.prepareStatement("select * from valorizacion where idexpediente = ?");
            ps.setString(1, numeroExpediente); //se le debe mandar el numero de expediente
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                //Extraccion de información de solicitante
                entornoActual.setValorizacion(rs.getString("descripcionvalor")); //variable del punto 7 pero en la clase de Entorno
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }

    }

    public void guardarValorizacion() {
        ConexionServidor myConexion = new ConexionServidor();
        try {
            Connection con = myConexion.getConnection();
            //Sentencia sql que hace el llamado a el procedimiento
            String sql0 = "{call usertemp (?,?)}";
            CallableStatement cs0 = con.prepareCall(sql0);
            cs0.setString(1, numeroExpediente);
            cs0.setString(2, extContext.getUserPrincipal().getName().toString());
            cs0.execute();
            cs0.close();
            String sql = "{call valor(?,?)}";
            CallableStatement cs = con.prepareCall(sql);
            //Setting los parametros a ser captorados or el proceso almacenado
            cs.setString(1, numeroExpediente); //aca va el codigo de expediente
            cs.setString(2, entornoActual.getValorizacion());
            //ejecucion del proceso almacenado
            cs.execute();
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "ACTUALIZACI&Oacute;N", "La información fue actualizada con éxito"));
            //cierre de CallableStatement y Connection
            cs.close();
            con.close();
        } catch (Exception e) {
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR", "información incorrecta o faltante"));
            System.out.println(e.getMessage());
        }
    }

    public void buscarRegistroFotografico() {
        registroActual.init();
    }

    public void guardarRegistroFotografico() {
        ConexionServidor myConexion = new ConexionServidor();
        try {
            Connection con = myConexion.getConnection();
            //Sentencia sql que hace el llamado a el procedimiento
            String sql0 = "{call usertemp (?,?)}";
            CallableStatement cs0 = con.prepareCall(sql0);
            cs0.setString(1, numeroExpediente);
            cs0.setString(2, extContext.getUserPrincipal().getName().toString());
            cs0.execute();
            cs0.close();
            String sql = "{call registrofoto(?,?)}";
            CallableStatement cs = con.prepareCall(sql);
            //Setting los parametros a ser captorados or el proceso almacenado
            cs.setString(1, numeroExpediente); //aca va el codigo de expediente
            cs.setString(2, registroActual.getRutaCompleta());
            //ejecucion del proceso almacenado
            cs.execute();
            registroActual.init();
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "ACTUALIZACI&Oacute;N", "La información fue actualizada con éxito"));
            //cierre de CallableStatement y Connection
            cs.close();
            con.close();
        } catch (Exception e) {
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR", "información incorrecta o faltante"));
            System.out.println(e.getMessage());
        }
    }

    public Result getListaBibliografia() throws Exception {
        ConexionServidor miConexion = new ConexionServidor();
        Connection conn = miConexion.getConnection();
        try {
            PreparedStatement ps = conn.prepareStatement("SELECT * FROM bibliografia WHERE idexpediente = ?");
            ps.setString(1, numeroExpediente);
            ResultSet rs = ps.executeQuery();
            return ResultSupport.toResult(rs);
        } finally {
            conn.close();
        }
    }

    public void guardarBibliografia() {
        ConexionServidor myConexion = new ConexionServidor();
        try {
            Connection con = myConexion.getConnection();
            //Sentencia sql que hace el llamado a el procedimiento
            String sql0 = "{call usertemp (?,?)}";
            CallableStatement cs0 = con.prepareCall(sql0);
            cs0.setString(1, numeroExpediente);
            cs0.setString(2, extContext.getUserPrincipal().getName().toString());
            cs0.execute();
            cs0.close();
            String sql = "{call biblio(?,?,?,?,?)}";
            CallableStatement cs = con.prepareCall(sql);
            //Setting los parametros a ser captorados or el proceso almacenado
            cs.setString(1, numeroExpediente); //aca va el codigo de expediente
            cs.setString(2, bibliografiaActual.getNombreDocumento());
            cs.setString(3, bibliografiaActual.getAutor());
            cs.setString(4, bibliografiaActual.getEditorial());
            cs.setInt(5, bibliografiaActual.getAnioPublicacion());
            //ejecucion del proceso almacenado
            cs.execute();
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "ACTUALIZACI&Oacute;N", "La información fue actualizada con éxito"));
            //cierre de CallableStatement y Connection
            cs.close();
            bibliografiaActual.limpiarBiblio();
            con.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    public void removerGlosario() throws Exception {
        ConexionServidor miConexion = new ConexionServidor();
        Connection con = miConexion.getConnection();
        try{
            PreparedStatement ps = con.prepareStatement("DELETE FROM glosario WHERE idexpediente = ? AND idconcepto = ?");
            ps.setString(1, numeroExpediente);
            ps.setInt(2, glosarioActual.getTerminoSeleccionado());
            ps.execute();
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "ELIMINACI&Oacute;N", "La información fue eliminada con éxito"));
            glosarioActual.setTerminoSeleccionado(0);
        } finally {
            con.close();
        }  
    }

    public void removerLibro() throws Exception {
        ConexionServidor miConexion = new ConexionServidor();
        Connection con = miConexion.getConnection();
        try{
            PreparedStatement ps = con.prepareStatement("DELETE FROM bibliografia WHERE idexpediente = ? AND idbibliografia = ?");
            ps.setString(1, numeroExpediente);
            ps.setInt(2, libroIntroducido);
            ps.execute();
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "ELIMINACI&Oacute;N", "La información fue eliminada con éxito"));
            libroIntroducido=null;
        } finally {
            con.close();
        }
    }

    public Result getListaConceptosExpediente() throws Exception {
        ConexionServidor miConexion = new ConexionServidor();
        Connection conn = miConexion.getConnection();        
        try {
            PreparedStatement ps = conn.prepareStatement("SELECT concepto.idconcepto, concepto.concepto, concepto.definicion FROM concepto, glosario WHERE concepto.idconcepto = glosario.idconcepto AND glosario.idexpediente = ?");
            ps.setString(1, numeroExpediente);
            ResultSet rs = ps.executeQuery();
            return ResultSupport.toResult(rs);
        } finally {
            conn.close();
        }
    }

    public void guardarGlosario() {
        ConexionServidor myConexion = new ConexionServidor();
        try {
            Connection con = myConexion.getConnection();
            //Sentencia sql que hace el llamado a el procedimiento
            String sql0 = "{call usertemp (?,?)}";
            CallableStatement cs0 = con.prepareCall(sql0);
            cs0.setString(1, numeroExpediente);
            cs0.setString(2, extContext.getUserPrincipal().getName().toString());
            cs0.execute();
            cs0.close();
            String sql = "{call agregarconcepto(?,?)}";
            CallableStatement cs = con.prepareCall(sql);
            //Setting los parametros a ser captorados or el proceso almacenado
            cs.setString(1, numeroExpediente); //aca va el codigo de expediente
            cs.setInt(2, glosarioActual.getTerminoSeleccionado());
            //ejecucion del proceso almacenado
            cs.execute();
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "ACTUALIZACI&Oacute;N", "La información fue actualizada con éxito"));
            //cierre de CallableStatement y Connection
            cs.close();
            con.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    public void existIT() {
        ConexionServidor miConexion = new ConexionServidor();
        try {
            Connection con = miConexion.getConnection();
            PreparedStatement ps = con.prepareStatement("select * from informe_tecnico where idexpediente = ?");
            ps.setString(1, numeroExpediente); //se le debe mandar el numero de expediente
            ResultSet rs = ps.executeQuery();
            existeIT = rs.next();
            System.out.println(existeIT);
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

    public void cambiarVisibilidad(ActionEvent evento) {
        existeIT = !existeIT;
        ConexionServidor myConexion = new ConexionServidor();
        try {
            Connection con = myConexion.getConnection();
            //Sentencia sql que hace el llamado a el procedimiento
            String sql = "{call rellenarinftec(?)}";
            CallableStatement cs = con.prepareCall(sql);
            //Setting los parametros a ser captorados or el proceso almacenado
            cs.setString(1, numeroExpediente); //aca va el codigo de expediente
            //ejecucion del proceso almacenado
            cs.execute();
            //Mensaje de actualizacion éxitosa
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "CREACION DE INFORME TECNICO", "El informe tecnico ha sido creado con éxito"));
            //cierre de CallableStatement y Connection
            cs.close();
            con.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    public void filtrarAlturas(AjaxBehaviorEvent evento) {
        if (caracteristicasActual.getNivelSeleccionado() == 1) {
            enableAltura1 = enableAltura2 = false;
        }
        if (caracteristicasActual.getNivelSeleccionado() == 2) {
            enableAltura1 = true;
            enableAltura2 = false;
        }
        if (caracteristicasActual.getNivelSeleccionado() == 3) {
            enableAltura1 = true;
            enableAltura2 = true;
        }

    }

    public void buscarResolucion() {
        ConexionServidor miConexion = new ConexionServidor();
        try {
            Connection con = miConexion.getConnection();
            PreparedStatement ps = con.prepareStatement("SELECT definicionresolucion FROM resolucion WHERE idexpediente = ?");
            ps.setString(1, numeroExpediente);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                //Extraccion la resolucion de solicitante
                resolucionActual.setContenido(rs.getString("definicionresolucion"));
                System.out.println(rs.getString("definicionresolucion"));

            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

    public void buscarConclu() {
        ConexionServidor miConexion = new ConexionServidor();
        try {
            Connection con = miConexion.getConnection();
            PreparedStatement ps = con.prepareStatement("SELECT definicionconclusion FROM conclusion WHERE idexpediente = ?");
            ps.setString(1, numeroExpediente);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                //Extraccion la resolucion de solicitante
                conclusionActual.setContenido(rs.getString("definicionconclusion"));
                System.out.println(rs.getString("definicionconclusion"));
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }


}
